home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 051-075 / disk_052 / tek4010 / toasc.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  4KB  |  121 lines

  1. /****************************************************
  2.  * vt100 emulator - window/keyboard support
  3.  *
  4.  *           860823 DBW - Integrated and rewrote lots of code
  5.  *      v2.0 860809 DBW - Major rewrite
  6.  *      v1.1 860720 DBW - Switches, 80 cols, colors, bug fixes
  7.  *      v1.0 860712 DBW - First version released
  8.  *
  9.  ****************************************************/
  10.  
  11. #define MODULE_WINDOW 1
  12. #include "vt100.h"
  13.  
  14. /************************************************
  15. *  function to take raw key data and convert it 
  16. *  into ascii chars
  17. **************************************************/
  18. int toasc(code,local)
  19. unsigned int code;
  20. int local;
  21.     {
  22.     static int ctrl = FALSE;
  23.     static int shift = FALSE;
  24.     static int capsl = FALSE;
  25.     char c;
  26.     static char keys[75] = {
  27.         '`','1','2','3','4','5','6','7','8','9','0','-' ,
  28.         '=','\\', 0, '0','q','w','e','r','t','y','u','i','o' ,
  29.         'p','[',']', 0, '1','2','3','a','s','d','f','g','h' ,
  30.         'j','k','l',';','\'', 0, 0, '4','5','6', 0, 'z','x','c','v',
  31.         'b','n','m',44,'.','/', 0, '.','7','8','9',' ',8,
  32.         '\t',13,13,27,127,0,0,0,'-' } ;
  33.  
  34.     switch ( code )
  35.         {
  36.         case 98:   capsl = TRUE; c = 0;break;
  37.         case 226:  capsl = FALSE;c = 0;break;
  38.         case 99:   ctrl = TRUE;  c = 0;break;
  39.         case 227:  ctrl = FALSE; c = 0;break;
  40.         case 96:
  41.         case 97:   shift = TRUE; c = 0;break;
  42.         case 224:
  43.         case 225:  shift = FALSE;c = 0;break;
  44.         case 0x50: 
  45.         case 0x51: 
  46.         case 0x52: 
  47.         case 0x53: 
  48.         case 0x54: 
  49.         case 0x55: 
  50.         case 0x56: 
  51.         case 0x57: 
  52.         case 0x58: 
  53.         case 0x59:  c = 0;
  54.                     if (shift)  sendstring(p_F[code - 0x50]);
  55.                     else        sendstring(p_f[code - 0x50]);
  56.                     break;
  57.         case 0x0f: c=0; sendstring("\033Op"); break;
  58.         case 0x1d: c=0; sendstring("\033Oq"); break;
  59.         case 0x1e: c=0; sendstring("\033Or"); break;
  60.         case 0x1f: c=0; sendstring("\033Os"); break;
  61.         case 0x2d: c=0; sendstring("\033Ot"); break;
  62.         case 0x2e: c=0; sendstring("\033Ou"); break;
  63.         case 0x2f: c=0; sendstring("\033Ov"); break;
  64.         case 0x3d: c=0; sendstring("\033Ow"); break;
  65.         case 0x3e: c=0; sendstring("\033Ox"); break;
  66.         case 0x3f: c=0; sendstring("\033Oy"); break;
  67.         case 0x43: c=0; sendstring("\033OM"); break;
  68.         case 0x4a: c=0; sendstring("\033Ol"); break;
  69.         case 0x5f: c=0; sendstring("\033Om"); break;
  70.         case 0x3c: c=0; sendstring("\033On"); break;
  71.         case 0x4c: c=0; sendstring("\033[A"); break;
  72.         case 0x4d: c=0; sendstring("\033[B"); break;
  73.         case 0x4e: c=0; sendstring("\033[C"); break;
  74.         case 0x4f: c=0; sendstring("\033[D"); break;
  75.  
  76.         default:
  77.         if (code < 75) c = keys[code];
  78.         else c = 0;
  79.         }
  80.  
  81.     /* add modifiers to the keys */
  82.  
  83.     if (c != 0) {
  84.         if (shift) {
  85.             if ((c <= 'z') && (c >= 'a')) c -= 32;
  86.             else
  87.             switch( c ) {
  88.                 case '[':  c = '{'; break;
  89.                 case ']':  c = '}'; break;
  90.                 case '\\': c = '|'; break;
  91.                 case '\'': c = '"'; break;
  92.                 case ';':  c = ':'; break;
  93.                 case '/':  c = '?'; break;
  94.                 case '.':  c = '>'; break;
  95.                 case ',':  c = '<'; break;
  96.                 case '`':  c = '~'; break;
  97.                 case '=':  c = '+'; break;
  98.                 case '-':  c = '_'; break;
  99.                 case '1':  c = '!'; break;
  100.                 case '2':  c = '@'; break;
  101.                 case '3':  c = '#'; break;
  102.                 case '4':  c = '$'; break;
  103.                 case '5':  c = '%'; break;
  104.                 case '6':  c = '^'; break;
  105.                 case '7':  c = '&'; break;
  106.                 case '8':  c = '*'; break;
  107.                 case '9':  c = '('; break;
  108.                 case '0':  c = ')'; break;
  109.                 default:            break;
  110.                 }
  111.             }
  112.         else if (capsl && (c <= 'z') && (c >= 'a')) c -= 32;
  113.         }
  114.     if (ctrl) {
  115.         if (c >= '`' && c <= 127) c -= 96;
  116.         else if (c >= '@' && c <= '_') c -= 64;
  117.         }
  118.     if (c != 0 && (!local)) sendchar(c);
  119.     return((int)c);
  120.     }
  121.